"""
字典： KV 键值对的结构  ---> Java Map HashMap   Hadoop(MapReduce) Hbase 列名  ： 列值
    一个 k 对应 一个 V
    K 不能重复

"""

def dict_1():
    #定义字典 {K:V}
    fruits = {"苹果":10,"葡萄":15,"香蕉":2.5,"柚子":10}
    print(fruits)
    #定义字典的其他方式  扩展内容  可学可不学
    #-- 根据构造器方法去创建  dict(K=V)
    item1 = dict(one=1,two=2,three=3)
    print(item1)
    #-- 通过zip函数，将两个序列压成字典  第一个序列作为K  第二个序列作为值 字符串也是序列
    item2 = dict( zip(["a","b","c"],"123") )
    print(item2)
    #-- 利用推导式创建字典
    item3 = { num:num**2 for num in range(1,10)  }
    print(item3)

    #通过键获取字典中对应的值
    print(fruits["葡萄"])

    #输出字典中的Key
    print( fruits.keys() ,type(fruits.keys()))

    #输出字典中的Value
    print(fruits.values(),type(fruits.values()))

    #输出字典中的每一个元素  输出是列表 列表中的每个元素是元组，这个元组有两个元素，对应K  和  V
    print(fruits.items(),type(fruits.items()))

    #修改元素 根据Key 修改值
    fruits["香蕉"] = 25
    print(fruits)
    #若赋值的该Key不存在，则会追加该K和V
    fruits["柠檬"] = 17
    print(fruits)
    #update函数， 如果Key存在则更新，Key不存在则添加
    fruits.update(苹果=67,菠萝=13)
    print(fruits)

    #字典中的get函数
    print( fruits.get("榴莲") ) #如果该元组不存在该列表返回值为None
    print(fruits.get("香蕉",60))#如果该元组不存在该列表返回值为60

    #popItem pop
    # --popItem 直接弹出最后一个元素
    f = fruits.popitem()
    print("弹出的元素为：",f)
    # -- pop 根据Key 来弹出值 如果Key不存在就返回设定的默认值
    print(fruits.pop("苹果"))
    print(fruits.pop("榴莲",100))
    print(fruits)
    #清空字典
    fruits.clear()
    print("清空后的字典：",fruits)
    #设置默认数据，添加数据的一种
    fruits.setdefault("榴莲",60) # 第一次 设置默认数据 榴莲 60
    print(fruits)  #{'榴莲': 60}
    fruits.setdefault("榴莲",100)#当再次设置相同Key的默认值的时候是没有效果的 只在第一次设置起作用
    print(fruits) #{'榴莲': 60}
    fruits["榴莲"] = 100
    print(fruits) #{'榴莲': 100}
#字典的遍历
def dict_2():
    fruits = {"苹果": 10, "葡萄": 15, "香蕉": 2.5, "柚子": 10}
    #根据Key 来获取值 ---通过遍历字典中的Key 来获取值
    for key in fruits.keys():
        print(key,fruits[key])

    # 根据字典的items()函数，进行遍历--- 根据遍历后的元组中的索引值来获取 k v
    for item in fruits.items():
        print(item,item[0],item[1])

    #根据字典的items()函数，进行遍历，直接打印 k v
    for key,value in fruits.items():
        print(key,value)


if __name__ == '__main__':
    #dict_1()
    dict_2()